const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');

async function testUploadAPI() {
    console.log('🧪 测试上传API...');
    
    const baseURL = 'http://localhost:3000';
    
    try {
        // 1. 检查服务器是否运行
        console.log('\n1️⃣ 检查服务器状态...');
        const healthResponse = await axios.get(`${baseURL}/health`);
        console.log('✅ 服务器运行正常:', healthResponse.data);
        
        // 2. 测试不带文件的上传（验证参数检查）
        console.log('\n2️⃣ 测试参数验证...');
        try {
            const formData = new FormData();
            formData.append('songName', '测试歌曲');
            formData.append('artistName', '测试歌手');
            // 故意不添加音频文件
            
            await axios.post(`${baseURL}/api/upload/complete`, formData, {
                headers: formData.getHeaders()
            });
        } catch (error) {
            if (error.response && error.response.status === 400) {
                console.log('✅ 参数验证正常:', error.response.data.message);
            } else {
                throw error;
            }
        }
        
        // 3. 测试只添加歌曲到数据库（不上传文件）
        console.log('\n3️⃣ 测试单独添加歌曲...');
        try {
            const songResponse = await axios.post(`${baseURL}/api/songs`, {
                name: '测试歌曲API-' + Date.now()
            });
            console.log('✅ 歌曲添加成功:', songResponse.data);
        } catch (error) {
            console.log('❌ 歌曲添加失败:', error.response?.data || error.message);
        }
        
        // 4. 测试添加歌手
        console.log('\n4️⃣ 测试单独添加歌手...');
        try {
            const singerResponse = await axios.post(`${baseURL}/api/songers`, {
                name: '测试歌手API-' + Date.now()
            });
            console.log('✅ 歌手添加成功:', singerResponse.data);
        } catch (error) {
            console.log('❌ 歌手添加失败:', error.response?.data || error.message);
        }
        
        // 5. 获取当前歌曲列表
        console.log('\n5️⃣ 获取歌曲列表...');
        try {
            const songsResponse = await axios.get(`${baseURL}/api/songs`);
            console.log(`✅ 获取到${songsResponse.data.data.length}首歌曲`);
            songsResponse.data.data.slice(0, 5).forEach((song, index) => {
                console.log(`  ${index + 1}. ${song.name || song.title} - ${song.artist || '未知'}`);
            });
        } catch (error) {
            console.log('❌ 获取歌曲列表失败:', error.response?.data || error.message);
        }
        
        // 6. 获取当前歌手列表
        console.log('\n6️⃣ 获取歌手列表...');
        try {
            const singersResponse = await axios.get(`${baseURL}/api/songers`);
            console.log(`✅ 获取到${singersResponse.data.data.length}位歌手`);
            singersResponse.data.data.slice(0, 5).forEach((singer, index) => {
                console.log(`  ${index + 1}. ${singer.name}`);
            });
        } catch (error) {
            console.log('❌ 获取歌手列表失败:', error.response?.data || error.message);
        }
        
    } catch (error) {
        if (error.code === 'ECONNREFUSED') {
            console.log('❌ 无法连接到服务器，请确保服务器正在运行');
            console.log('   启动命令: cd server && npm start');
        } else {
            console.error('❌ 测试失败:', error.message);
        }
    }
}

// 检查axios是否安装
try {
    require('axios');
    require('form-data');
} catch (error) {
    console.log('⚠️  缺少测试依赖，正在尝试安装...');
    console.log('请运行: npm install axios form-data');
    process.exit(1);
}

testUploadAPI().then(() => {
    console.log('\n🏁 API测试完成');
    process.exit(0);
}).catch(error => {
    console.error('测试失败:', error);
    process.exit(1);
});